package br.com.beiramar.manager.corretormanager;

import java.util.ArrayList;
import java.util.List;

import org.jboss.seam.annotations.AutoCreate;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Out;
import org.jboss.seam.framework.EntityQuery;

import br.com.beiramar.entity.coordenadorProduto.CoordenadorProduto;
import br.com.beiramar.entity.pessoa.corretor.CorretorPessoa;
import br.com.beiramar.entity.pessoa.corretor.Titulo;
import br.com.beiramar.entity.pessoa.corretor.classificacao.Classificacao;
import br.com.beiramar.entity.pessoa.corretor.situacao.Situacao;
import br.com.beiramar.entity.pessoa.corretor.status.StatusCorretor;
import br.com.beiramar.entity.pessoa.corretor.tipoCreci.TipoCreci;
import br.com.beiramar.entity.pessoa.diretor.Diretor;
import br.com.beiramar.entity.pessoa.diretorNN.DiretorNN;
import br.com.beiramar.entity.pessoa.escolaridade.EscolaridadePessoa;
import br.com.beiramar.entity.pessoa.estadoCivil.EstadoCivil;
import br.com.beiramar.entity.pessoa.orgaoEmissor.OrgaoEmissorRg;
import br.com.beiramar.entity.pessoa.sexo.SexoPessoa;
import br.com.beiramar.manager.abstractmanager.AbstractManager;


@AutoCreate
@Name("corretorManager")
@SuppressWarnings("unchecked")
public class CorretorManager extends AbstractManager {

	@In(required=false)
	private String creciCorretor = null;
	
	@In(required=false)
	private String nomeCorretor = null;
	
	@In(required=false)
	private String nomeGuerra = null;
	
	@In(required=false)
	@Out(required=false)
	public Classificacao classificacaoSelecionada;

	@In(required=false)
	@Out(required=false)
	public Titulo tituloSelecionado;
	
	@In(required=false)
	@Out(required=false)
	public Situacao situacaoSelecionada;
	
	@In(required=false)
	@Out(required=false)
	public StatusCorretor statusSelecionado;
	
	@In(required = false)
	@Out(required = false)
	private Boolean valor = false;
	
	
	
	public CorretorPessoa corretorId(String idCorretor){
		CorretorPessoa corretorid = new CorretorPessoa();
	
		corretorid = (CorretorPessoa) entityManager.createNamedQuery("corretor.CorretorId").setParameter("id", Integer.parseInt(idCorretor)).getSingleResult();
		return corretorid;
	}
	
	public List<CorretorPessoa> listaEmpMaster(Integer idClassificacao){
		List<CorretorPessoa> listaEmpMaster = null;
		listaEmpMaster = entityManager.createNamedQuery("corretor.listEmpMaster").setParameter("id", idClassificacao).getResultList();
		return listaEmpMaster;
	}
	public List<CorretorPessoa> listaDiretorNN(Integer idClassificacao){
		List<CorretorPessoa> listaDiretorNN = null;
		listaDiretorNN = entityManager.createNamedQuery("corretor.listDiretorNN").setParameter("id", idClassificacao).getResultList();
		return listaDiretorNN;
	}
	
	public List<TipoCreci> listaTipoCreci(){
		List<TipoCreci> listaTipoCreci = null;
		listaTipoCreci = entityManager.createNamedQuery("tipoCreci.Dados").getResultList();
		return listaTipoCreci;
	}
	
	public List<StatusCorretor> listaStatusCorretor(){
		List<StatusCorretor> listaStatusCor = null;
		listaStatusCor = entityManager.createNamedQuery("statusCorretor.Dados").getResultList();
		return listaStatusCor;
	}
	
	public List<Situacao> listaSituacao(){
		List<Situacao> listaSituacao = null;
		listaSituacao = entityManager.createNamedQuery("situacao.Dados").getResultList();
		return listaSituacao;
	}
	
	public List<Diretor> listaDiretor(){
		List<Diretor> listaDiretor = null;
		listaDiretor = entityManager.createNamedQuery("diretor.Dados").getResultList();
		return listaDiretor;
	}
	
	public List<DiretorNN> listaDiretorNN(){
		List<DiretorNN> listaDiretorNN = null;
		listaDiretorNN = entityManager.createNamedQuery("diretorNN.Dados").getResultList();
		return listaDiretorNN;
	}
	
	public List<CoordenadorProduto> listaCoordenadorProduto(){
		List<CoordenadorProduto> listaCoordenadorProduto = null;
		listaCoordenadorProduto = entityManager.createNamedQuery("coordProduto.Dados").getResultList();
		return listaCoordenadorProduto;
	}
	
	public List<Classificacao> listaClassificacao() {
		List<Classificacao> listaClassificacao = null;
		listaClassificacao = entityManager.createNamedQuery("classificacao.Dados").getResultList();
		return listaClassificacao;
	}

	public List<SexoPessoa> listaSexo() {
		List<SexoPessoa> listaSexo = null;
		listaSexo = entityManager.createNamedQuery("sexo.Dados")
				.getResultList();
		return listaSexo;
	}

	public List<EstadoCivil> listaEstadoCivil() {
		List<EstadoCivil> listaEstadosCivis = null;
		listaEstadosCivis = entityManager.createNamedQuery("estadoCivil.Dados")
				.getResultList();
		return listaEstadosCivis;
	}

	public List<EscolaridadePessoa> listaEscolaridade() {
		List<EscolaridadePessoa> listaEscolaridades = null;
		listaEscolaridades = entityManager.createNamedQuery(
				"escolaridadePessoa.Dados").getResultList();
		return listaEscolaridades;
	}

	public List<OrgaoEmissorRg> listaOrgaoEmissorRg() {
		List<OrgaoEmissorRg> listaOrgaoEmissor = null;
		listaOrgaoEmissor = entityManager.createNamedQuery(
				"orgaoEmissorRg.Dados").getResultList();
		return listaOrgaoEmissor;
	}

	public List<CorretorPessoa> listaCorretores() {
		List<CorretorPessoa> listaCorretores = null;
		List<String> queryDinamica = new ArrayList<String>();
			
			if(nomeCorretor != null && !nomeCorretor.equals("")){
				queryDinamica.add("lower(result.pessoa.nomePessoa) like concat(lower(#{nomeCorretor}),'%')");
			}
			if(nomeGuerra != null && !nomeGuerra.equals("")){
				queryDinamica.add("lower(result.nomeGuerra) like concat(lower(#{nomeGuerra}),'%')");
			}
			if(creciCorretor != null && !creciCorretor.equals("")){
				queryDinamica.add("result.corretorCreci = #{creciCorretor}");
			}
			if(classificacaoSelecionada != null){
				queryDinamica.add("result.classificacao = #{classificacaoSelecionada}");
				this.setValor(true);
			}
			if(tituloSelecionado != null){
				queryDinamica.add("result.titulo = #{tituloSelecionado}");
			}
			if(situacaoSelecionada != null){
				queryDinamica.add("result.situacao = #{situacaoSelecionada}");
			}
			if(statusSelecionado != null){
				queryDinamica.add("result.statusCorretor = #{statusSelecionado}");
			}

			try {
				EntityQuery<CorretorPessoa> entityQuery = new EntityQuery<CorretorPessoa>();
				entityQuery.setEntityManager(entityManager);
				entityQuery.setEjbql(" FROM CorretorPessoa result");
				entityQuery.setRestrictionExpressionStrings(queryDinamica);
				
				listaCorretores = entityQuery.getResultList();
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		return listaCorretores;
	}

	public List<CorretorPessoa> listaCorretoresComFiltroTitulo(Integer id) {
		List<CorretorPessoa> listaCorretores = null;
		listaCorretores = (List<CorretorPessoa>) entityManager
				.createNamedQuery("corretor.Titulo")
				.setParameter("Titulo_idTitulo", id).getResultList();
		return listaCorretores;
	}

	public List<Titulo> listaTitulos() {
		List<Titulo> listaTitulos = null;
		listaTitulos = entityManager.createNamedQuery("titulo.Lista")
				.getResultList();
		return listaTitulos;
	}

	public void salvarCorretor(CorretorPessoa c) {
		try {
			entityManager.merge(c);
			entityManager.flush();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public void excluirCorretor(CorretorPessoa c) {
		entityManager.remove(c);
		entityManager.flush();
	}

	public void setValor(Boolean valor) {
		this.valor = valor;
	}

	public Boolean getValor() {
		return valor;
	}
}